package com.bonshotels.DomainLayer.DomainModel;

import java.io.Serializable;
import java.util.Map;
import java.util.TreeMap;

/**
 * Classe Client.
 * 
 * Aquesta classe ens permet guardar i treballar amb les dades dels clients 
 * del nostre sistema. Sabem el seu dni ,el qual els identifica, aixi com 
 * el nom, cognoms i email.
 * 
 * Com que utilitzem el framework de persistencia
 * Hibernate i aquest utilitza reflexio per fer la seva feina les nostres classes han d'acomplir una
 * serie de propietats perque la reflexio del Hibernate pugui fer completament la seva feina, les
 * classes han de ser publiques, han de tenir un constructor public buit (si no en tenen un d'explicit
 * el per defecte ja ho es), han d'implementar Serializable, i han de tenir substituits (override) els
 * metodes equals() i hashCode() per que identifiquin les classes a partir de la seva clau natural.
 * 
 * @author: Ana Rebollo Pin
 */
public class Client implements Serializable {
	
	/** Identificador de versio de la classe, es un requisit de Serializable per distingir les diverses
	 * implementacions d'una classe. */
	private static final long serialVersionUID = 7481621488191491557L;

	/**
	 * permet obtenir el serialVersionUID .
	 *
	 * @return el serialVersionUID
	 */
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	/** dni del client. */
	private String dni;
	
	/** nom del client. */
	private String nom;
	
	/** cognoms del client. */
	private String cognoms;
	
	/** email del client. */
	private String email;
	
	
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((dni == null) ? 0 : dni.hashCode());
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Client other = (Client) obj;
		if (dni == null) {
			if (other.dni != null)
				return false;
		} else if (!dni.equals(other.dni))
			return false;
		return true;
	}

	/**
	 * Ens permet consultar part de les dades del client, concretament el nom, 
	 * cognom i l'email.
	 *
	 * @return retorna un map que conte el nom, cognom i email del client.
	 * Els index del map per obtenir els parametres anteriors son nom, 
	 * cognoms i email.
	 */
	public Map <String, Object> obteDades() {
		Map <String, Object> dades = new TreeMap <String, Object>();
		dades.put("nom",nom);
		dades.put("cognoms", cognoms);
		dades.put("email", email);
		return dades;
	}

	/**
	 * Permet obtenir el dni.
	 *
	 * @return dni
	 */
	public String getDni() {
		return dni;
	}

	/**
	 * Modificar el dni donantli el valor que rep com a parametre.
	 * * @param dni per el que sustituim
	 */
	public void setDni(String dni) {
		this.dni = dni;
	}

	/**
	 * Permet obtenir el nom.
	 *
	 * @return nom
	 */
	public String getNom() {
		return nom;
	}

	/**
	*Modificar el nom donantli el valor que rep com a parametre.
	** @param nom per el que sustituim 
	*/
	public void setNom(String nom) {
		this.nom = nom;
	}

	/**
	 *obte el cognoms.
	 *
	 * @return cognoms
	 */
	public String getCognoms() {
		return cognoms;
	}

	/**
	 *Modificar el cognom donantli el valor que rep com a parametre.
	 *@param cognoms per els que sustituim el valor de la dataInici anterior de la classe
	 */
	public void setCognoms(String cognoms) {
		this.cognoms = cognoms;
	}

	/**
	 * obte el email.
	 *
	 * @return email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * Modifica el email donantli el valor que rep com ha parametre.
	 *
	 * @param email per el que volem substituir
	 */
	public void setEmail(String email) {
		this.email = email;
	}
}
